package ru.compft.web.controller;

import ru.compft.common.data.Dictionary;
import ru.compft.common.data.Term;
import ru.compft.common.services.DictionariesService;
import ru.compft.web.WebConst;
import ru.compft.web.adapter.TermAdapter;
import ru.compft.web.beans.TermBean;
import ru.compft.web.security.validator.TermValidator;
import ru.compft.web.utils.FacesUtils;

import java.io.Serializable;
import java.util.List;

/**
 * User: VVasiliev
 * Date: 14.06.12
 * Time: 13:43
 * Контроллер для управления терминами системы
 */
public class TermsController implements Serializable {
    private static final long serialVersionUID = 7276896378686539380L;

    /**
     * Получаем список всех словарей, чтоб привязать к ним термин
     */
    public List<Dictionary> getAllDictionaries() {
        final DictionariesService dictionariesService = (DictionariesService) FacesUtils.getSpringBean(WebConst.DICTIONARY_SERVICE);
        return dictionariesService.getAllDictionaries();
    }

    public void editTerm() {
        final TermBean termBean = (TermBean) FacesUtils.getBackingBean(WebConst.TERM_BEAN);
        // получаем сервис работы со словарями
        if (termBean != null) {
            final DictionariesService dictionariesService = (DictionariesService) FacesUtils.getSpringBean(WebConst.DICTIONARY_SERVICE);
        }
    }

    public void addTerm() {
        final TermBean termBean = (TermBean) FacesUtils.getBackingBean(WebConst.TERM_BEAN);

        if (termBean != null) {
            if (termBean.getId() != null) {
                // такого быть здесь не должно. Выходим из метода
                // todo сделать через файл messages
                FacesUtils.addErrorMessage(null, "Ошибка при добавлении термина");
                return;
            }
            // валидация
            if (!TermValidator.isValid(termBean)) {
                // todo сделать через файл messages
                FacesUtils.addErrorMessage(null, "Ошибка валидации термина");
                return;
            }

            Term term = TermAdapter.convertToTerm(termBean);

            if (term == null) {
                // todo сделать через файл messages
                FacesUtils.addErrorMessage(null, "Ошибка конвертации термина");
                return;
            }
            final DictionariesService service = (DictionariesService) FacesUtils.getSpringBean(WebConst.DICTIONARY_SERVICE);

            // вызов сервиса для добавления словаря из строки
            final Dictionary dictionary = service.getDictionaryByCode(termBean.getDictionary());
            if (dictionary == null) {
                // todo сделать через файл messages
                FacesUtils.addErrorMessage(null, "Ошибка добавления термина в словарь");
                return;
            }

            // добавляем словарь
            term.setDictionary(dictionary);
            // сохраняем
            boolean addSuccess = service.createTerm(term);

            if (addSuccess) {
                // сохранено успешно
                // todo сделать через файл messages
                FacesUtils.addInfoMessage(null, "Термин сохранен успешно");
            } else {
                // сохранено не успешно
                // todo сделать через файл messages
                FacesUtils.addErrorMessage(null, "Ошибка сохранения термина");
            }
        }
    }
}
